package com.baijia.tianxiao.push.dao.mybatis;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import com.baijia.tianxiao.push.dao.mybatis.base.BaseMapper;
import com.baijia.tianxiao.push.model.PushBindRecord;

/**
 * 
 * PushBindRecordMapper数据库操作接口类
 * 
 **/

public interface PushBindRecordMapper extends BaseMapper{


	/**
	 * 
	 * 查询（根据主键ID查询）
	 * 
	 **/
	PushBindRecord  selectByPrimaryKey (Long id );

	/**
	 * 
	 * 删除（根据主键ID删除）
	 * 
	 **/
	int deleteByPrimaryKey (Long id );

	/**
	 * 
	 * 添加
	 * 
	 **/
	int insert( PushBindRecord record );

	/**
	 * 
	 * 添加 （匹配有值的字段）
	 * 
	 **/
	int insertSelective( PushBindRecord record );

	/**
	 * 
	 * 修改 （匹配有值的字段）
	 * 
	 **/
	int updateByPrimaryKeySelective( PushBindRecord record );

	/**
	 * 
	 * 修改（根据主键ID修改）
	 * 
	 **/
	int updateByPrimaryKey ( PushBindRecord record );
	
	
	/**
	 * 查询用户所有绑定记录,默认时间倒序
	 * 
	 * @param userId
	 * @param userType
	 * @param deviceDomain
	 * @param limit
	 * @return
	 */
	public List<PushBindRecord> qureyUserBindList(@Param("userId") String userId,@Param("userType")String userType,@Param("limit")Integer limit);
	
	/**
	 * 查询用户所有绑定记录,默认时间倒序
	 * 
	 * @param userId
	 * @param userType
	 * @param deviceDomain
	 * @param limit
	 * @return
	 */
	public List<PushBindRecord> qureyUserBindListByPrefix(@Param("userIdPrefix") String userIdPrefix,@Param("userType")String userType,@Param("limit")Integer limit);
	
	
	/**
	 * 查询用户绑定推送的最新信息
	 * 
	 * @param userId
	 * @param userType
	 * @param deviceDomain
	 * @return
	 */
	public PushBindRecord queryUserBindLatest(@Param("userId") String userId,@Param("userType")String userType);
	
	/**
	 * 推送解绑，更新最新的一条绑定记录的状态
	 * 
	 * @param userId
	 * @param userType
	 * @param deviceDomain
	 * @return
	 */
	public int updateLatestForUnbind(@Param("userId")String userId,@Param("userType")String userType);
	
	/**
	 * 根据设备id查询
	 * 
	 * @param deviceId
	 * @return
	 */
	public List<PushBindRecord> queryUserBindListByDeviceId(@Param("deviceId") String deviceId,@Param("limit") String limit);
	
	/**
	 * 
	 * 
	 * @param deviceId
	 * @return
	 */
	@Update("update push_bind_record set bind_status = 0,unbind_time=NOW() where device_id = #{deviceId}")
	public int updateBindStatusByDeviceId(@Param("deviceId") String deviceId);
	
	/**
	 * 
	 * @return
	 */
	public int updateBindInfoByDeviceId(PushBindRecord record);
	
	public PushBindRecord getUserBindByDeviceId(@Param("deviceId") String deviceId);

}